package com.cxy.petworldapp

import android.os.Bundle
import android.os.CountDownTimer
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.RatingBar
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatImageView
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import com.cxy.petworldapp.databinding.ActivityPetMallBinding

/**
 * 宠物商城主页面Activity
 * 负责展示宠物商城的完整界面，包括：
 * - 顶部工具栏（返回、搜索、购物车、结算按钮）
 * - 商品分类标签
 * - 横幅轮播图
 * - 限时抢购倒计时
 * - 商品网格列表
 * - 底部购物车预览
 */
class PetMallActivity : AppCompatActivity() {

    private lateinit var binding: ActivityPetMallBinding // ViewBinding实例，用于访问布局中的视图
    private lateinit var countDownTimer: CountDownTimer   // 限时抢购倒计时器
    private var cartItemCount = 0                         // 购物车中商品数量
    private var cartTotalPrice = 0.0                       // 购物车总金额

    // 商品分类数据 - 用于展示在顶部的分类标签
    private val categories = listOf(
        "全部", "狗粮", "猫粮", "玩具", "护理", "服饰", "零食", "保健品"
    )

    // 横幅图片资源列表 - 用于轮播图展示
    private val bannerImages = listOf(
        R.drawable.banner1,
        R.drawable.banner2,
        R.drawable.banner2
    )

    // 商品数据列表 - 包含商品名称、价格、评分、图片资源和描述
    private val products = listOf(
        Product("优质狗粮", 128.0, 4.5, R.drawable.placeholder_product, "精选天然原料"),
        Product("猫咪玩具", 45.0, 4.8, R.drawable.placeholder_product, "逗猫棒套装"),
        Product("宠物服饰", 88.0, 4.2, R.drawable.placeholder_product, "冬季保暖衣服"),
        Product("营养零食", 36.0, 4.7, R.drawable.placeholder_product, "鸡肉干零食"),
        Product("洗护用品", 68.0, 4.3, R.drawable.placeholder_product, "宠物专用沐浴露"),
        Product("智能喂食器", 299.0, 4.9, R.drawable.placeholder_product, "自动定时喂食"),
        Product("宠物窝垫", 158.0, 4.6, R.drawable.placeholder_product, "柔软舒适保暖"),
        Product("牵引绳", 25.0, 4.4, R.drawable.placeholder_product, "安全反光设计")
    )

    /**
     * Activity创建时的回调方法
     * 初始化界面和各个功能模块
     */
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityPetMallBinding.inflate(layoutInflater) // 初始化ViewBinding
        setContentView(binding.root) // 设置内容视图

        // 初始化各个功能模块
        setupToolbar()        // 设置顶部工具栏
        setupCategories()     // 设置商品分类标签
        setupBanner()         // 设置横幅轮播图
        setupFlashSale()      // 设置限时抢购倒计时
        setupProducts()       // 设置商品网格列表
        setupCartPreview()    // 设置底部购物车预览
    }

    /**
     * 设置顶部工具栏
     * 配置返回按钮、搜索按钮、购物车按钮和结算按钮的点击事件
     */
    private fun setupToolbar() {
        // 返回按钮 - 关闭当前Activity
        binding.btnBack.setOnClickListener {
            finish()
        }

        // 搜索按钮 - 待实现搜索功能
        binding.btnSearch.setOnClickListener {
            // TODO: 实现搜索功能 - 打开搜索界面或弹出搜索框
        }

        // 购物车按钮 - 待实现购物车视图
        binding.btnCart.setOnClickListener {
            // TODO: 实现购物车视图 - 显示购物车详情页面
        }

        // 结算按钮 - 待实现结算功能
        binding.btnCheckout.setOnClickListener {
            // TODO: 实现结算功能 - 跳转到结算页面
        }
    }

    /**
     * 设置商品分类标签
     * 动态创建分类标签视图并添加到水平滚动容器中
     */
    private fun setupCategories() {
        categories.forEach { categoryName ->
            // 从布局文件inflate分类标签视图
            val categoryView = LayoutInflater.from(this)
                .inflate(R.layout.item_category_tag, binding.categoryContainer, false)

            // 设置分类文本
            val textView = categoryView.findViewById<TextView>(R.id.category_text)
            textView.text = categoryName

            // 分类标签点击事件 - 待实现按分类筛选
            categoryView.setOnClickListener {
                // TODO: 按分类筛选产品 - 根据选中的分类过滤商品列表
            }

            // 将分类标签添加到容器中
            binding.categoryContainer.addView(categoryView)
        }
    }

    /**
     * 设置横幅轮播图
     * 创建横幅适配器并设置自动滚动功能
     */
    private fun setupBanner() {
        // 创建横幅适配器并设置给ViewPager2
        val bannerAdapter = BannerAdapter(bannerImages)
        binding.bannerViewpager.adapter = bannerAdapter

        // 监听页面变化事件 - 用于自动滚动控制
        binding.bannerViewpager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
            override fun onPageSelected(position: Int) {
                super.onPageSelected(position)
                // TODO: 页面变化时重置自动滚动计时器
            }
        })

        // 启动横幅自动滚动
        startBannerAutoScroll()
    }

    /**
     * 启动横幅自动滚动
     * 使用Handler或定时器实现横幅的自动轮播效果
     */
    private fun startBannerAutoScroll() {
        // TODO: 使用Handler实现自动滚动 - 定时切换ViewPager2的页面
    }

    /**
     * 设置限时抢购倒计时
     * 创建并启动2小时倒计时器，实时更新倒计时显示
     */
    private fun setupFlashSale() {
        // 设置2小时的总倒计时时间（毫秒）
        val totalTime = 2 * 60 * 60 * 1000L

        // 创建倒计时器，每秒更新一次
        countDownTimer = object : CountDownTimer(totalTime, 1000) {
            /**
             * 每秒触发的回调方法
             * 计算剩余时间并更新倒计时显示
             */
            override fun onTick(millisUntilFinished: Long) {
                // 计算小时、分钟、秒
                val hours = millisUntilFinished / (1000 * 60 * 60)
                val minutes = (millisUntilFinished % (1000 * 60 * 60)) / (1000 * 60)
                val seconds = (millisUntilFinished % (1000 * 60)) / 1000

                // 格式化并显示倒计时（HH:MM:SS格式）
                binding.countdownTimer.text = String.format("%02d:%02d:%02d", hours, minutes, seconds)
            }

            /**
             * 倒计时结束时的回调方法
             * 处理限时抢购结束的逻辑
             */
            override fun onFinish() {
                binding.countdownTimer.text = "00:00:00" // 显示倒计时结束
                // TODO: 处理闪购结束 - 禁用抢购按钮、显示结束提示等
            }
        }.start() // 启动倒计时器
    }

    /**
     * 设置商品网格列表
     * 配置RecyclerView的布局管理器和适配器，展示商品列表
     */
    private fun setupProducts() {
        // 创建网格布局管理器，每行显示2个商品
        val layoutManager = GridLayoutManager(this, 2)
        binding.productGrid.layoutManager = layoutManager

        // 创建商品适配器，并设置添加到购物车的回调
        val productAdapter = ProductAdapter(products) { product ->
            addToCart(product) // 点击添加到购物车按钮时的处理
        }
        binding.productGrid.adapter = productAdapter // 设置适配器
    }

    /**
     * 设置底部购物车预览
     * 初始化购物车预览区域的显示状态
     */
    private fun setupCartPreview() {
        updateCartPreview() // 更新购物车预览信息
    }

    /**
     * 添加商品到购物车
     * 处理商品添加到购物车的逻辑，更新购物车状态并显示提示
     * @param product 要添加的商品对象
     */
    private fun addToCart(product: Product) {
        cartItemCount++                    // 增加购物车商品数量
        cartTotalPrice += product.price    // 累加商品价格到总价
        updateCartPreview()                // 更新购物车预览显示

        // 如果购物车有商品，显示购物车徽章
        if (cartItemCount > 0) {
            binding.cartBadge.visibility = View.VISIBLE
            binding.cartBadge.text = cartItemCount.toString()
        }

        // 显示添加成功的提示消息
        Toast.makeText(this, "已添加到购物车", Toast.LENGTH_SHORT).show()
    }

    /**
     * 更新购物车预览信息
     * 根据购物车商品数量和总价更新底部购物车预览的显示
     */
    private fun updateCartPreview() {
        // 更新购物车商品数量显示（使用复数字符串资源）
//        binding.cartTotalItems.text = resources.getQuantityString(
////            R.plurals.cart_items, cartItemCount, cartItemCount
//        )
        // 更新购物车总价显示（人民币格式）
        binding.cartTotalPrice.text = String.format("¥%.2f", cartTotalPrice)

        // 如果购物车有商品，启用结算按钮
        binding.btnCheckout.isEnabled = cartItemCount > 0
    }

    override fun onDestroy() {
        super.onDestroy()
        countDownTimer.cancel()
    }

    data class Product(
        val name: String,
        val price: Double,
        val rating: Double,
        val imageRes: Int,
        val description: String
    )

    class ProductAdapter(
        private val products: List<Product>,
        private val onAddToCart: (Product) -> Unit
    ) : RecyclerView.Adapter<ProductAdapter.ProductViewHolder>() {

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProductViewHolder {
            val view = LayoutInflater.from(parent.context)
                .inflate(R.layout.item_product_card, parent, false)
            return ProductViewHolder(view)
        }

        override fun onBindViewHolder(holder: ProductViewHolder, position: Int) {
            val product = products[position]
            holder.bind(product)
        }

        override fun getItemCount() = products.size

        inner class ProductViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
            private val productName: TextView = itemView.findViewById(R.id.product_name)
            private val productPrice: TextView = itemView.findViewById(R.id.product_price)
            private val productRating: RatingBar = itemView.findViewById(R.id.product_rating)
            private val ratingText: TextView = itemView.findViewById(R.id.rating_text)
            private val productImage: ImageView = itemView.findViewById(R.id.product_image)
            private val btnAddToCart: ImageView = itemView.findViewById(R.id.btn_add_to_cart)

            fun bind(product: Product) {
                productName.text = product.name
                productPrice.text = String.format("¥%.2f", product.price)
                productRating.rating = product.rating.toFloat()
                ratingText.text = product.rating.toString()
                productImage.setImageResource(product.imageRes)

                btnAddToCart.setOnClickListener {
                    onAddToCart(product)
                }

                itemView.setOnClickListener {
                    // TODO: 显示产品详情
                }
            }
        }
    }

    class BannerAdapter(private val images: List<Int>) : RecyclerView.Adapter<BannerAdapter.BannerViewHolder>() {

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BannerViewHolder {
            val view = LayoutInflater.from(parent.context)
                .inflate(R.layout.item_banner, parent, false)
            return BannerViewHolder(view)
        }

        override fun onBindViewHolder(holder: BannerViewHolder, position: Int) {
            val imageRes = images[position % images.size]
            holder.imageView.setImageResource(imageRes)
        }

        override fun getItemCount() = Int.MAX_VALUE // Infinite scroll

        class BannerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
            val imageView: AppCompatImageView = itemView.findViewById(R.id.banner_image)
        }
    }
}